package com.jiang.utils;

import java.util.Iterator;
import java.util.Map;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class JSONUtil {
	/**
	 * 将一个对象直接转换为一个JSONObject对象， 同样适合于JSON格式的字符串
	 * 但是如果存在java.sql.Date或者java.sql.Timestamp时间格式，调用例外一个toJson转换方法
	 * 
	 * @param obj
	 * @return
	 */
	public static JSONObject toJson(Object obj) {
		return JSONObject.fromObject(obj);
	}

	/**
	 * 
	 * @param obj
	 *            需要转换的参数
	 * @param processors
	 *            类型转换器的集合,参数是一个Map集合，键代表需要转换类型的全路径，值是类型转换器
	 * @return
	 * @throws ClassNotFoundException
	 */
	public static JSONObject toJson(Object obj, Map<String, JsonValueProcessor> processors)
			throws ClassNotFoundException {
		// 定义一个JSONConfig对象，该对象可以制定一个转换规则
		JsonConfig config = new JsonConfig();
		if (processors != null && !processors.isEmpty()) {
			Iterator<java.util.Map.Entry<String, JsonValueProcessor>> it = processors.entrySet().iterator();
			while (it.hasNext()) {
				Map.Entry<java.lang.String, net.sf.json.processors.JsonValueProcessor> entry = (Map.Entry<java.lang.String, net.sf.json.processors.JsonValueProcessor>) it
						.next();
				String key = entry.getKey();
				JsonValueProcessor processor = processors.get(key); // 获取转换器
				// 反射获取到需要转换的类型
				Class<?> cls = Class.forName(key); // 获取需要转换的类型Class对象
				config.registerJsonValueProcessor(cls, processor);
			}
		}
		return JSONObject.fromObject(obj, config);
	}
}
